<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script type="text/javascript">
			/*
			 * 	创建一个构造函数  用来创建Person对象
			 * 		构造函数是一个普通函数，创建方式和普通函数没有区别
			 * 
			 * 	构造函数和普通函数的区别就是调用方式的不同
			 * 	普通函数直接调用,而构造函数需要使用new关键字来调用
			 * 
			 * 构造函数的执行流程
			 * 	1.立刻创建一个新对象
			 * 	2.将新建的对象设置为函数中的this, 在构造函数中可以使用this来引用新建的对象
			 * 	3.逐行执行函数中的代码
			 * 	4.将创建的对象作为返回值返回
			 * 
			 *  使用同一个构造函数创建的对象，我们称为一类对象，也将一个构造函称为一个类
			 * 		我们将通过一个构造函数创建的对象，称为是该类的实例
			 */
			
			function Person(name, age, gender){
				console.log(this);
				
				this.name = name;
				this.age = age;
				this.gender = gender;
				// 这样导致构造函数没执行一次就会创建一个新的方法
				// 将sayName放在全局作用域中
				// this.sayName = function(){
				// 	 alert('Hello' + this.name)
				// };
				
				//this.sayName = fun;
			};
			// 这样就是每个方法共享的了，但是定义在全局作用域中了
			// 污染了全局作用域
			/*
			function fun(){
					alert('Hello' + this.name);
				};
			*/
			
			// 使用原型对象解决
			Person.prototype.sayName = function(){
				alert('Hello' + this.name)
			};
			
			// 构造函数调用
			var per = new Person('张三', 18, '男');
			var per1 = new Person('张四', 28, '女');

			
			console.log(per);
			per.sayName();
			
			
			console.log(per1);
			per1.sayName();
			
			console.log(per.sayName == per1.sayName)
			
		</script>
	</head>
	<body>
	</body>
</html>
